package com.finance.cooperate.common.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @ClassName SmsRegularUtils
 * @Description 短信正则工具类
 * @Author shenanxin
 * @Date 2023/9/12 15:24
 * @Modify ...
 */
public class SmsRegularUtils {


    /**
    * @Author shenanxin
    * @Description 判断是否包含网址信息
    * @Date 15:25 2023/9/12
    * @Param [text]
    * @return boolean
    **/
    public static boolean containsWebsite(String text) {
        // 定义一个正则表达式模式，用于匹配网站地址
        String pattern = "(www\\.[\\S]+)|(https?://[\\S]+)";

        // 使用正则表达式进行匹配
        Pattern regex = Pattern.compile(pattern);
        Matcher matcher = regex.matcher(text);

        return matcher.find();
    }


    /**
    * @Author shenanxin
    * @Description 抽取出现的天数
    * @Date 17:10 2023/10/19
    * @Param [text]
    * @return java.lang.Integer
    **/
    public static Integer extractDias(String text) {

        try {
            // 使用正则表达式匹配数字和其后面的 "dias" 或 "día"
            Pattern pattern = Pattern.compile("\\d+\\s*d(i|í)as");
            Matcher matcher = pattern.matcher(text);

            // 找到匹配的数字和 "dias" 或 "día"
            if (matcher.find()) {
                String match = matcher.group();
                // 提取数字
                String[] parts = match.split("\\s+");
                return Integer.parseInt(parts[0]);

            }
        } catch (Exception e) {
        }

        return null;
    }


    /**
    * @Author shenanxin
    * @Description 抽取短信中的日期
    * @Date 17:07 2023/9/12
    * @Param [text]
    * @return java.util.Date
    **/
    public static Date extractDate(String text) {
        // 定义正则表达式模式，用于匹配日期
        String datePattern = "\\d{4}-\\d{2}-\\d{2}|\\d{2}/\\d{2}/\\d{4}|\\d{2}-\\d{2}-\\d{4}";

        // 定义可能的数据格式
        String[] dateFormats = {"yyyy-MM-dd", "dd/MM/yyyy", "MM-dd-yyyy"};

        // 使用正则表达式进行匹配
        Pattern regex = Pattern.compile(datePattern);
        Matcher matcher = regex.matcher(text);

        if (matcher.find()) {
            String dateString = matcher.group();

            for (String df : dateFormats) {
                SimpleDateFormat dateFormat = new SimpleDateFormat(df);
                try {
                    Date date = dateFormat.parse(dateString);

                    Date startDate = DateUtils.toDate("2010-01-01", DateUtils.YYYY_MM_DD);
                    Date endDate = DateUtils.toDate("2030-01-01", DateUtils.YYYY_MM_DD);
                    if (date.before(startDate) || date.after(endDate)) {
                        continue;
                    }

                    return dateFormat.parse(dateString);
                } catch (ParseException e) {
                }
            }

        }

        return null;
    }


    /**
    * @Author shenanxin
    * @Description 抽取 SPEI 短信类型
    * @Date 17:05 2023/9/12
    * @Param [message]
    * @return java.lang.String
    **/
    public static String extractSpeiType(String message) {
        if (message.contains("recibio")) { // 收款
            return "receipt";
        } else if (message.contains("realizo")) { // 转出
            return "payment";
        } else { // 未知
            return null;
        }
    }


    /**
    * @Author shenanxin
    * @Description 抽取 SPEI 短信金额
    * @Date 17:05 2023/9/12
    * @Param [message]
    * @return java.lang.Integer
    **/
    public static Integer extractSpeiAmount(String message) {
        // 定义正则表达式模式，用于匹配交易金额
        Pattern pattern = Pattern.compile("\\$[\\d,]+(\\.\\d{2})?");
        Matcher matcher = pattern.matcher(message);

        if (matcher.find()) {
            String amount = matcher.group().replaceAll("[^\\d.]", ""); // 去掉非数字和小数点的字符

            Double amountDouble = Double.valueOf(amount);

            return amountDouble.intValue();
        } else {
            return null;
        }
    }


}
